// 认证入口
import router from './router'
import store from './store'
import NProgress from 'nprogress' // Progress 进度条
import 'nprogress/nprogress.css'// Progress 进度条样式
import { Message } from 'element-ui'
import { getToken } from '@/utils/auth' // 验权

// 页面刷新时，重新赋值token
// if (sessionStorage.getItem('token')) {
//   store.commit('SET_TOKEN', sessionStorage.getItem('token'))
// }

// permission judge function
// function hasPermission(roles, permissionRoles) {
//   if (roles.indexOf('admin') >= 0) return true
//   if (!permissionRoles) return true
//   return roles.some(role => permissionRoles.indexOf(role) >= 0)
// }

const whiteList = ['/login'] // 不重定向白名单
// 注册一个全局的before钩子  每次每个路由改变的时候都执行一次
router.beforeEach((to, from, next) => {
  NProgress.start()
  if (getToken()) {
    if (to.path === '/login') {
      next({ path: '/' })
      NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
    } else {
      if (store.getters.userRoles.length === 0) {
        store.dispatch('GetInfo').then(res => { // 拉取用户信息
          // 第二种
          // const roles = res.data.roles
          // console.log('roles?', roles)
          // store.dispatch('GenerateRoutes', { roles }).then(() => {
          //   console.log('addrouters', store.getters.addRouters)
          //   router.addRoutes(store.getters.addRouters)
          //   next({ ...to, replace: true })
          // })
          next()
        }).catch((err) => {
          store.dispatch('FedLogOut').then(() => {
            Message.error(err || 'Verification failed, please login again')
            next({ path: '/' })
          })
        })
      } else {
        next()
        // if (hasPermission(store.getters.roles, to.meta.roles)) {
        //   next()//
        // } else {
        //   next({ path: '/401', replace: true, query: { noGoBack: true }})
        // }
      }
    }
  } else {
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done() // 结束Progress
})
